/************************ OBJETOS **************************/
var unidades = function (ataque,defensa,carga,tipo,puntos,costo,nombre,seleccion){
 	this.ataque = ataque;
 	this.defensa = defensa;
 	this.carga = carga;
 	this.tipo = tipo;
 	this.puntos = puntos;
 	this.costo = costo;
 	this.nombre = nombre;
 	this.cantidad_seleccionada = seleccion;
}

var jugador = function (unidades1,unidades2,unidades3,identificador){
	this.unidades1 = unidades1;
	this.unidades2 = unidades2;
	this.unidades3 = unidades3;
	this.identificador = identificador;
}

jugador.prototype.calcularPuntos = function(){
	return (unidad1.puntos * this.unidades1) + (unidad2.puntos * this.unidades2) + (unidad3.puntos * this.unidades3) ;
};

/************************* ESCENARIO ***************************/

var unidad1 = new unidades(5,2,100,"Distancia",10,15,"unidad1",0);
var unidad2 = new unidades(2,5,300,"Fisica",10,15,"unidad2",0);
var unidad3 = new unidades(7,1,150,"Fisica",15,25,"unidad3",0);

var retador = new jugador(10,10,10);
var R = [];
var O = [];

var oponentes =[
	oponente1 = new jugador(0,0,20,0),
	oponente2 = new jugador(0,150,0,1),
	oponente3 = new jugador(75,75,0,2)
];

var unidad_seleccionada_retador = "NULL";
var unidad_selecionada_oponente= "NULL" ;
var atk;
var dfs;


											/** FUNCIONES **/

/********************* FASE DE SELECCION *************************/

function seleccionar_oponente(){
	var contenedor = document.getElementById("consola");
	
	document.getElementById("comienzo").style.visibility = "hidden"; 
	contenedor.style.visibility = "visible"; 

	contenedor.innerHTML += "<h2>Selecciona un Oponente</h2><div class='row'>";

	for(i=0; i< oponentes.length ; i++){
		
		if ( Math.abs(retador.calcularPuntos() - oponentes[i].calcularPuntos() ) < retador.calcularPuntos() * 0.20){
			
			if ( Math.abs(retador.calcularPuntos() - oponentes[i].calcularPuntos() ) > retador.calcularPuntos() * 0.05){

				if( retador.calcularPuntos() > oponentes[i].calcularPuntos()){
					contenedor.innerHTML += "<div class='small-4 jugadores columns'> <a href='#'' onclick='seleccionar_unidades("+oponentes[i].identificador+")'><img src='img/oponente2.png' class='imagen'/><br/><p class='puntos'> Puntos:"+oponentes[i].calcularPuntos()+"<br/>Dificultad: F&aacutecil </p> </a>";
				}else{
					contenedor.innerHTML += "<div class='small-4 jugadores columns'><a href='#' onclick='seleccionar_unidades("+oponentes[i].identificador+")'> <img src='img/oponente2.png' class='imagen'/><br/><p class='puntos'> Puntos:"+oponentes[i].calcularPuntos()+"<br/>Dificultad: Dificil </p> </a>";
				}
			}else{
				if ( (retador.calcularPuntos() - oponentes[i].calcularPuntos() ) < retador.calcularPuntos() * 0.05 || (retador.calcularPuntos() - oponentes[i].calcularPuntos() ) < retador.calcularPuntos() * 0.05 ){
					contenedor.innerHTML += "<div class='small-4 jugadores columns'><a href='#' onclick='seleccionar_unidades("+oponentes[i].identificador+")'> <img src='img/oponente1.png' class='imagen'/><br/><p class='puntos'> Puntos:"+oponentes[i].calcularPuntos()+"<br/>Dificultad: Normal </p> </a>";
				}
			}

		}else{
			contenedor.innerHTML += "<div class='small-4 columns'> <img src='img/oponente1.png' class='imagen'/><br/><p class='puntos'> Puntos:"+oponentes[i].calcularPuntos()+"<br/>Dificultad: No califica como oponente </p>";
		}
	
	}

	contenedor.innerHTML += "</div>";	
}

 /******************* FASE DE PREPARACION ************************/

function pintar(unidad){
	var contenedor = document.getElementById("unidades_retador");

		switch(unidad){
			case 1:
				document.getElementById("uno").innerHTML = retador.unidades1;
				contenedor.innerHTML += "<div class='small-2 columns'><img src='img/unidad1.png' class='imagen_seleccionada'/> <br/> Cantidad: "+R[R.length-1].cantidad_seleccionada+" </div>";
				break;
			case 2:
				document.getElementById("dos").innerHTML = retador.unidades2;
				contenedor.innerHTML += "<div class='small-2 columns'><img src='img/unidad2.png' class='imagen_seleccionada'/> <br/> Cantidad: "+R[R.length-1].cantidad_seleccionada+" </div>";
				break;
			case 3:
				document.getElementById("tres").innerHTML = retador.unidades3;
				contenedor.innerHTML += "<div class='small-2 columns'><img src='img/unidad3.png' class='imagen_seleccionada'/> <br/> Cantidad: "+R[R.length-1].cantidad_seleccionada+" </div>";
				break;
			case -1:
				contenedor.innerHTML += "<div class='small-2 columns'> <button class='boton' onclick='combatir()'> Al Combate! </button> </div>";
		}
}

function borrar_arreglo_retador(){
	
	R.length= cont_unidades1_retador = cont_unidades2_retador = cont_unidades3_retador = 0;
	
	document.getElementById("uno").innerHTML = retador.unidades1;
	document.getElementById("dos").innerHTML = retador.unidades2;
	document.getElementById("tres").innerHTML = retador.unidades3;

	document.getElementById("unidades_retador").innerHTML ="";
	var botones = document.getElementsByClassName("boton_seleccion");
	botones[0].disabled = botones[1].disabled = botones[2].disabled = false;
}

//Bug: No deberia repetir unidades hasta que este full de las diferentes
function selecionar_unidades_de_oponente(id_oponente){
	//Hacer ordenamiento por la mayor defensa

	var O =  [];
	while (O.length < 5){
		
		if (oponentes[id_oponente].unidades2 > 0){
			O.push(unidad2);
			O[O.length - 1].cantidad_seleccionada = oponentes[id_oponente].unidades2 ;
		}

		if (oponentes[id_oponente].unidades1 > 0){ O.push(unidad1); O[O.length - 1].cantidad_seleccionada =  oponentes[id_oponente].unidades1; }
		
		if (oponentes[id_oponente].unidades3 > 0){ O.push(unidad3); O[O.length - 1].cantidad_seleccionada = oponentes[id_oponente].unidades3 ; }
	}
	alert(O.length);
	return O;
}

function fgrep (array, property, value) {
	for (var i = 0; i < array.length; i++) {
		if ( array[i][property] === value ) {
			return array[i];
		}
	}
}

//Bug: Rellenado de los repetidos incorrecto (FIXED)
function seleccionar_unidad_de_retador(tipo_unidad){
	var find = fgrep(R,'nombre','unidad'+tipo_unidad);
	if ( !find ) {
		var cantidad = prompt("Indique la cantidad de unidades", "");
	} else {
		R.push(find);
		pintar(tipo_unidad);
		if (R.length >= 5 ) {
			pintar(-1);
			var buttons = document.getElementsByClassName("boton_seleccion");
			for (var i = 0; i < buttons.length; i++ ) {
				buttons[i].disabled = true;
			}
		}
		return;
	}
		
	switch(tipo_unidad){
		case 1:
			if ( cantidad > retador.unidades1){
				alert("No posee tantas unidades de este tipo");
			}else{
				R.push(unidad1);
				R[R.length-1].cantidad_seleccionada = cantidad;
				pintar(1);
				document.getElementsByClassName("boton_seleccion")[0].disabled = "true";
			}
			break;
		case 2:
			if ( cantidad > retador.unidades2){
				alert("No posee tantas unidades de este tipo");
			}else{
				R.push(unidad2);
				R[R.length -1].cantidad_seleccionada = cantidad;
				pintar(2);
				document.getElementsByClassName("boton_seleccion")[1].disabled = "true";
			}
			break;
		case 3:
			if ( cantidad > retador.unidades3){
				alert("No posee tantas unidades de este tipo");
			}else{
				R.push(unidad3);
				R[R.length-1].cantidad_seleccionada = cantidad;
				pintar(3);
				document.getElementsByClassName("boton_seleccion")[2].disabled = "true";
			}
			break;
	}
	
	if ( R.length == 3) {
		var buttons = document.getElementsByClassName("boton_seleccion");
		for (var i = 0; i < buttons.length; i++ ) {
			buttons[i].disabled = false;
		}
	}
};

function seleccionar_unidades(id_oponente){
	
	var contenedor = document.getElementById("consola");
	O = selecionar_unidades_de_oponente(id_oponente);

	contenedor.innerHTML = "";

	contenedor.innerHTML += "<h2> Selecci&oacuten de Unidades </h2> <br/> <h4> Las unidades que posee son: </h4> <br/>";

	contenedor.innerHTML += "<div class='row'> <div class='small-4 columns'> <img src='img/unidad1.png' class='imagen'/><br/> <div class='puntos'> Tipo: Distancia <br/> Cantidad:<p id='uno'>"+ retador.unidades1+"</p><br/> <button class='boton_seleccion' onclick='seleccionar_unidad_de_retador(1)'> Seleccionar </button> </div> </div> <div class='small-4 columns'> <img src='img/unidad2.png' class='imagen'/> <br/> <div class='puntos'> Tipo: Fisica <br/> Cantidad:<p id='dos'>"+ retador.unidades2 + "</p><br/> <button class='boton_seleccion' onclick='seleccionar_unidad_de_retador(2)'> Seleccionar </button> </div> </div> <div class='small-4 columns'> <img src='img/unidad3.png' class='imagen'/> <br/> <div class='puntos'>Tipo: Fisica <br/> Cantidad: <p id='tres'>" + retador.unidades3 + "</p><br/> <button class='boton_seleccion' onclick='seleccionar_unidad_de_retador(3)'> Seleccionar </button> </div> </div> </div> <br/> ";							

	contenedor.innerHTML += "<h4> Unidades seleccionadas: </h4> <br/><div class='row' id='unidades_retador' > </div> <br/> <button onclick='borrar_arreglo_retador()' class='boton'> Limpiar seleccion </buton> ";
}

/******************* FASE DE COMBATE *******************************/

//Bug: Los random no se generaban bien (FIXED)
function resultados (atk,dfs){
	if ( atk * ((Math.random() * 0.2) + 0.9) - dfs * ((Math.random() * 0.2) + 0.9) > 0){
			alert("Felicidades es el ganador! :D");


	}else{
		alert("Perdiste :(");
	}
	document.getElementById("mis_unidades").innerHTML = "";
	document.getElementById("unidades_oponente").innerHTML = "";
	combatir();
	
}

function atacar(){
	if (unidad_seleccionada_retador == "NULL"){
		alert("Debe seleccionar una unidad para combatir");
	}else{
		/*falta calcular la parte de los random */
		atk = unidad_seleccionada_retador.cantidad_seleccionada * unidad_seleccionada_retador.ataque;
		dfs = unidad_seleccionada_oponente.cantidad_seleccionada * unidad_seleccionada_oponente.defensa;
		resultados(atk,dfs);
	}

}

//Bug: Las unidades a distancia son las que no pueden asaltar (FIXED)
//Bug: Los random no estaban bien (FIXED)
function asaltar(){
	if (unidad_seleccionada_retador == "NULL"){
		alert("Debe seleccionar una unidad para combatir");
	}else{
		if (unidad_seleccionada_retador.tipo == "Distancia"){
			alert("La unidad seleccionada no puede asaltar");
		}else{
			atk = (unidad_seleccionada_retador.cantidad_seleccionada - Math.floor((Math.random() * 20) + 5)/100 * unidad_seleccionada_retador.cantidad_seleccionada) * unidad_seleccionada_retador.ataque * Math.floor((Math.random() * 20) + 20);
			dfs = unidad_seleccionada_oponente.cantidad_seleccionada * unidad_seleccionada_oponente.defensa;
			resultados(atk,dfs);
		}
	}
}

function seleccionar_unidad_para_combate(unidad,posicion){
	unidad_seleccionada_retador = unidad;
	if ( posicion != 0){
		unidad_seleccionada_retador.ataque -= unidad_seleccionada_retador.ataque * 0.10;
	}

	unidad_seleccionada_oponente = O[0];
	if ( document.getElementById("unidades_oponente").innerHTML == '' ) {
		document.getElementById("unidades_oponente").innerHTML += " <h3>Unidad del oponente</h3></br> <img src='img/"+unidad_seleccionada_oponente.nombre+".png'/> <br/> Ataque: "+unidad_seleccionada_oponente.ataque+"<br/> Defensa: "+unidad_seleccionada_oponente.defensa+"<br/> Cantidad: "+unidad_seleccionada_oponente.cantidad_seleccionada;
	}
}

function combatir(){

	document.getElementById("consola").innerHTML = "";

	document.getElementById("combate").style.visibility = "visible";
	
	document.getElementById("mis_unidades").innerHTML += "<h3>Tus unidades en combate</h3> <br/>";
	for ( i =0 ; i < 5 ; i++){
		document.getElementById("mis_unidades").innerHTML += "<button class='boton' onclick='seleccionar_unidad_para_combate("+R[i].nombre+","+i+")'> <img src='img/"+R[i].nombre+".png'></button><br/> Ataque:"+R[i].ataque+"<br/> Defensa:"+R[i].defensa+"<br/> Cantidad: "+R[i].cantidad_seleccionada+"<br/>";

	}
}


/********************** INCIO **************************/
window.onload=function(){
	document.getElementById("comienzo").onclick = seleccionar_oponente;
};

